﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using SIMCPresenter;
using SIMCPresenter.Parametros;
using SIMCObjetoNegocio;

public partial class WebUserControls_WUCPermisosDePortafolio : System.Web.UI.UserControl,
    IPermisosPortafolioView
{
    private PermisosPortafolioPresenter m_Presenter;
    public Usuario usuario;
    string Url;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        Url = Request.AppRelativeCurrentExecutionFilePath + "?idportafolio=" + IdPortafolio;
        usuario = ((Usuario)Session["Usuario"]);
        m_Presenter = new PermisosPortafolioPresenter(this);        
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Iniciar != null)
            {
              
                Iniciar(null, null);
                lblusuarioSelec.Text = UsuarioSeleccionado;

                if (Session["NombreUsuario"] != null)
                {
                    NombreUsuarioSeleccionado = Session["NombreUsuario"].ToString();
                    Session["NombreUsuario"] = null;
                }

                if (HayUsuarioSeleccionado())
                {
                    divAlias.Visible = ViewData.Estado == EstadoPortafolioUsuario.Aprobado;
                }
                else
                {
                    PuedeAprobar = false;
                    PuedeInactivar = false;
                    PuedeRechazar = false;
                    PuedeRenovar = false;
                    PuedeSolicitar = false;
                }
            }
        }
    }

    private bool HayUsuarioSeleccionado()
    {
        return ViewData != null;
    }

    public event EventHandler<EventArgs> Iniciar;
    public event EventHandler<EventArgs> Aprobar;
    public event EventHandler<EventArgs> Rechazar;
    public event EventHandler<EventArgs> Inactivar;
    public event EventHandler<EventArgs> Solicitar;
    public event EventHandler<EventArgs> Renovar;
    public event EventHandler<SearchEventArgs<AliasParametros>> GuardarAlias;

    public int IdPortafolio
    {
        get
        {
            if (Request.QueryString["idportafolio"] != null)
                return Convert.ToInt32(Request.QueryString["idportafolio"]);

            return 0;
        }
    }

    public string NombreUsuarioSeleccionado
    {
        get
        {
            return hdfNombreUsuario.Value;
        }
        set
        {
            hdfNombreUsuario.Value = value;
        }
    }

    public string UsuarioSeleccionado
    {
        get
        {
            if (Request.QueryString["usuario"] != null)
                return Request.QueryString["usuario"].ToString();

            return string.Empty;
        }
        set
        {
            lblusuarioSelec.Text = value;
        }
    }

    public List<PortafolioPermiso> ListaDePermisos
    {
        get
        {
            List<PortafolioPermiso> retornar = new List<PortafolioPermiso>();

            foreach (ListItem item in chkPermisos.Items)
            {
                if (item.Selected)
                    retornar.Add(new PortafolioPermiso
                    {
                        Codigo = item.Value
                    });
            }

            return retornar;
        }
        set
        {
            chkPermisos.DataTextField = "Descripcion";
            chkPermisos.DataValueField = "Codigo";
            chkPermisos.DataSource = value;
            chkPermisos.DataBind();
        }
    }

    public int IdPortafolioUsuario
    {
        get
        {
            if (Request.QueryString["idportafoliousuario"] != null)
                return Convert.ToInt32(Request.QueryString["idportafoliousuario"].ToString());

            return 0;
        }
    }

    public PortafolioDeUsuario ViewData
    {
        get
        {
            if (UsuarioSeleccionado == string.Empty)
                return null;

            return new PortafolioDeUsuario
            {
                Alias = divAlias.Visible ? lblAlias.Text : NombreUsuarioSeleccionado,
                Estado = EstadoPortafolioUsuarioFactory.Crear(lblEstado.Text),
                FechaCreacion = DateTime.Now,
                FechaUltimoCambio = DateTime.Now,
                IdPortafolio = IdPortafolio,
                IdUsuarioUltimoCambio = usuario.Id,
                ListaPermisos = ListaDePermisos,
                UltimoAcceso = DateTime.Now,
                UserName = UsuarioSeleccionado,
                UsuarioCreador = usuario.Id,
                Id = IdPortafolioUsuario
            };
        }
        set
        {
            if (value != null)
            {
                lblAlias.Text = value.Alias;
                lblEstado.Text = value.Estado.ToString();

                if (value.ListaPermisos != null)
                {
                    foreach (PortafolioPermiso item in value.ListaPermisos)
                    {
                        chkPermisos.Items.FindByValue(item.Codigo).Selected = true;
                    }
                }
            }
            else
            {
                lblEstado.Text = EstadoPortafolioUsuario.Nuevo.ToString();
            }
        }
    }

    public void MostrarMensaje(string p_Mensaje, bool p_Exito)
    {
        lblMensaje.Text = p_Mensaje;
        lblMensaje.ForeColor = p_Exito ? System.Drawing.Color.Green : System.Drawing.Color.Red;
    }

    #region Seguridad
    public bool PuedeAprobar
    {
        get { return btnAprobar.Visible; }
        set { btnAprobar.Visible = value; }
    }

    public bool PuedeRechazar
    {
        get { return btnRechazar.Visible; }
        set { btnRechazar.Visible = value; }
    }

    public bool PuedeInactivar
    {
        get { return btnInactivar.Visible; }
        set { btnInactivar.Visible = value; }
    }

    public bool PuedeSolicitar
    {
        get { return btnSolicitar.Visible; }
        set { btnSolicitar.Visible = value; }
    }

    public bool PuedeRenovar
    {
        get { return btnRenovar.Visible; }
        set { btnRenovar.Visible = value; }
    }
    #endregion

    protected void btnAprobar_Click(object sender, EventArgs e)
    {
        if (Aprobar != null)
        {
            Aprobar(null, null);

            if (lblMensaje.Text == string.Empty)
                Response.Redirect(Url);
        }
    }

    protected void btnRechazar_Click(object sender, EventArgs e)
    {
        if (Rechazar != null)
        {
            Rechazar(null, null);

            if (lblMensaje.Text == string.Empty)
                Response.Redirect(Url);
        }
    }

    protected void btnSolicitar_Click(object sender, EventArgs e)
    {
        if (Solicitar != null)
        {
            Solicitar(null, null);

            if (lblMensaje.Text == string.Empty)
                Response.Redirect(Url);
        }
    }

    protected void btnInactivar_Click(object sender, EventArgs e)
    {
        if (Inactivar != null)
        {
            Inactivar(null, null);

            if (lblMensaje.Text == string.Empty)
                Response.Redirect(Url);
        }
    }

    protected void btnRenovar_Click(object sender, EventArgs e)
    {
        if (Renovar != null)
        {
            Renovar(null, null);

            if (lblMensaje.Text == string.Empty)
                Response.Redirect(Url);
        }
    }

    public int IdUsuario
    {
        get { throw new NotImplementedException(); }
    }

    public Rol RolUsuario
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public bool EsUsuarioInterno
    {
        get { throw new NotImplementedException(); }
    }

    public string ObjetoSeguridad
    {
        get { throw new NotImplementedException(); }
    }

    protected void lnkCambiarAlias_Click(object sender, EventArgs e)
    {
        CambiarAlias(true);
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        CambiarAlias(false);
    }

    private void CambiarAlias(bool p_Visible)
    {
        lblAlias.Visible = !p_Visible;
        lnkCambiarAlias.Visible = !p_Visible;
        txtAlias.Visible = p_Visible;
        btnCancelar.Visible = p_Visible;
        btnGuardarAlias.Visible = p_Visible;
    }

    protected void btnGuardarAlias_Click(object sender, EventArgs e)
    {
        if (GuardarAlias != null)
        {
            GuardarAlias(null, new SearchEventArgs<AliasParametros>
                (new AliasParametros(IdPortafolioUsuario, txtAlias.Text)));
            CambiarAlias(false);
        }
    }
    
}